package com.demo.java.OD151_200.OD184;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【IPv4 地址转换成整数】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145863942
 */
public class OdMain {
    // 定义常量 INVALID_IP，表示无效的 IP 地址
    private static final String INVALID_IP = "invalid IP";

    public static void main(String[] args) {
        // 创建一个扫描器，用来读取用户输入
        Scanner scanner = new Scanner(System.in);

        // 循环读取用户输入的每一行
        while (scanner.hasNextLine()) {
            // 读取输入的 IP 地址
            String input = scanner.nextLine();

            // 使用 "#" 分隔符将输入的 IP 地址分割成四部分
            String[] ipParts = input.split("#");

            // 如果分割后的数组长度不等于 4，则说明输入格式错误，输出 "invalid IP"
            if (ipParts.length != 4) {
                System.out.println(INVALID_IP);
                continue; // 继续下一次循环
            }

            // 用 StringBuilder 来构建完整的二进制字符串
            StringBuilder binaryString = new StringBuilder();

            // 遍历每一部分 IP 地址
            for (String ipPart : ipParts) {
                try {
                    // 尝试将每个部分转换为整数
                    int num = Integer.parseInt(ipPart);

                    // 如果该部分的整数小于 0 或大于 255，说明 IP 地址无效
                    if (num < 0 || num > 255) {
                        System.out.println(INVALID_IP);
                        continue; // 继续下一次循环
                    }

                    // 将当前部分的整数转换为 8 位二进制字符串，并拼接到二进制字符串中
                    binaryString.append(String.format("%8s", Integer.toBinaryString(num)).replace(' ', '0'));
                } catch (NumberFormatException e) {
                    // 如果转换失败，说明输入的不是合法的数字，输出 "invalid IP"
                    System.out.println(INVALID_IP);
                    continue; // 继续下一次循环
                }
            }

            // 将拼接好的二进制字符串转换为十进制整数
            int decimalIp = Integer.parseInt(binaryString.toString(), 2);

            // 输出最终的十进制数值
            System.out.println(decimalIp);
        }
    }
}
